﻿using System;
using System.Diagnostics;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Input.Touch;
using GauntletFramework.StateManagment.Menu;
using GauntletFramework.StateManagment.Menu.Menus;

namespace GauntletFramework.Input
{
    public enum AdvancedButtonState
    {
        //Error = 0,
        Up = 1,
        Pressed = 2,
        Down = 3,
        Released = 4
    }

    public enum PhoneInputState
    {
        PhoneControlNone,// in no control mode tapping will result in (Yes, No, Action1) being activated when the user taps
        PhoneControlTop, PhoneControlBottom,
        PhoneControlYesNo,
        PhoneControlPauseTop, PhoneControlPauseBottom, PhoneControlPauseAuto
    }

    public class BasicInput : DrawableGameComponent
    {
        public BasicInput()
            : base((Game)StaticGame.Game)
        {
            GetState();
            //fixme check for player
            primaryPlayer = 0;
            if (ActionButton == null) ActionButton = Game.Content.Load<Texture2D>(@"GauntletBase\ActionButton");
            if (ArrrowButton == null) ArrrowButton = Game.Content.Load<Texture2D>(@"GauntletBase\ArrowButton");
            if (YesNoButton == null) YesNoButton = Game.Content.Load<Texture2D>(@"GauntletBase\YesNoButton");
            if (PauseButton == null) PauseButton = Game.Content.Load<Texture2D>(@"GauntletBase\PauseButton");

            if (DebugFont == null) DebugFont = Game.Content.Load<SpriteFont>(@"GauntletBase\MenuFont");
        }

        static Texture2D ActionButton, ArrrowButton, YesNoButton, PauseButton;
        static SpriteFont DebugFont;
        int primaryPlayer;
        GamePadState[] CurrentGamePads;
        GamePadState[] PreviousGamePads;

        MouseState CurrentMouse;
        MouseState PreviousMouse;

        KeyboardState CurrentKeyboard;
        KeyboardState PreviousKeyboard;

        TouchCollection CurrentTouches;
        TouchCollection PreviousTouches;

        public AdvancedButtonState ArrowLeft, ArrowRight, ArrowUp, ArrowDown, Action1, Action2, Action3, ActionPause, ButtonYes, ButtonNo, ButtonBack;

        Rectangle ArrowZone = new Rectangle(0, 0, 0, 0), ActionZone = new Rectangle(0, 0, 0, 0), YesNoZone = new Rectangle(0, 0, 0, 0), PauseZone = new Rectangle(0, 0, 0, 0);

        public PhoneInputState PhoneInputState { get { return RawPhoneInputState; } set { ChangePIS(value); } }
        PhoneInputState RawPhoneInputState = PhoneInputState.PhoneControlNone;

        void ChangePIS(PhoneInputState NewState)
        {
            if (NewState == PhoneInputState.PhoneControlPauseAuto)
            {
                if (NewState == PhoneInputState.PhoneControlTop || NewState == PhoneInputState.PhoneControlPauseTop)
                    NewState = PhoneInputState.PhoneControlPauseTop;
                else 
                    NewState = PhoneInputState.PhoneControlPauseBottom;
            }

            RawPhoneInputState = NewState;
        }

        protected void GetState()
        {
            CurrentGamePads = new GamePadState[4];
            CurrentGamePads[0] = GamePad.GetState(PlayerIndex.One);
            CurrentGamePads[1] = GamePad.GetState(PlayerIndex.Two);
            CurrentGamePads[2] = GamePad.GetState(PlayerIndex.Three);
            CurrentGamePads[3] = GamePad.GetState(PlayerIndex.Four);

            CurrentMouse = Mouse.GetState();

            CurrentKeyboard = Keyboard.GetState();

            CurrentTouches = TouchPanel.GetState();
        }

        public override void Update(GameTime gameTime)
        {
            PreviousGamePads = CurrentGamePads;
            PreviousMouse = CurrentMouse;
            PreviousKeyboard = CurrentKeyboard;
            PreviousTouches = CurrentTouches;
            
            GetState();

            //need some way to determine who is the master controller for xobx controls

            UpdateStandardInput();

            base.Update(gameTime);
        }

        public void PhoneDraw()
        {
            //not done yet
        }

        #region Standard Input
        void SetState(ref AdvancedButtonState ABS, ButtonState Current, ButtonState Previous)
        {
            if (Current == ButtonState.Pressed && Previous == ButtonState.Released)
                ABS = AdvancedButtonState.Pressed;
            else if (Current == ButtonState.Released && Previous == ButtonState.Pressed)
                ABS = AdvancedButtonState.Released;
        }

        void SetState(ref AdvancedButtonState ABS, bool Current, bool Previous)
        {
            if (Current && !Previous)
                ABS = AdvancedButtonState.Pressed;
            else if (!Current && Previous)
                ABS = AdvancedButtonState.Released;
        }

        void SetState(ref AdvancedButtonState ABS, KeyboardState Current, KeyboardState Previous, Keys key)
        {
            if (Current.IsKeyDown(key) && Previous.IsKeyUp(key))
                ABS = AdvancedButtonState.Pressed;
            else if (Current.IsKeyUp(key) && Previous.IsKeyDown(key))
                ABS = AdvancedButtonState.Released;
        }
        
        void SetState(ref AdvancedButtonState ABS, Point TouchLocation, Point LastTouchLocation, Rectangle Region)
        {
            if (Region.Contains(TouchLocation) && !Region.Contains(LastTouchLocation))
                ABS = AdvancedButtonState.Pressed;
            else if (!Region.Contains(TouchLocation) && Region.Contains(LastTouchLocation))
                ABS = AdvancedButtonState.Released;
        }

        void updateState(ref AdvancedButtonState ABS)
        {
            if (ABS == AdvancedButtonState.Pressed)
                ABS = AdvancedButtonState.Down;
            if (ABS == AdvancedButtonState.Released)
                ABS = AdvancedButtonState.Up;
        }

        void UpdateStandardInput()
        {
            updateState(ref ArrowLeft);
            updateState(ref ArrowRight);
            updateState(ref ArrowUp);
            updateState(ref ArrowDown);

            updateState(ref Action1);
            updateState(ref Action2);
            updateState(ref Action3);
            updateState(ref ActionPause);

            updateState(ref ButtonYes);
            updateState(ref ButtonNo);

            updateState(ref ButtonBack);

            /************************                         gamepad                         ************************/
            SetState(ref ArrowLeft, CurrentGamePads[primaryPlayer].DPad.Left, PreviousGamePads[primaryPlayer].DPad.Left);
            SetState(ref ArrowRight, CurrentGamePads[primaryPlayer].DPad.Right, PreviousGamePads[primaryPlayer].DPad.Right);
            SetState(ref ArrowUp, CurrentGamePads[primaryPlayer].DPad.Up, PreviousGamePads[primaryPlayer].DPad.Up);
            SetState(ref ArrowDown, CurrentGamePads[primaryPlayer].DPad.Down, PreviousGamePads[primaryPlayer].DPad.Down);
            SetState(ref ArrowLeft, CurrentGamePads[primaryPlayer].ThumbSticks.Right.X < -0.9f, PreviousGamePads[primaryPlayer].ThumbSticks.Right.X < -0.9f);
            SetState(ref ArrowRight, CurrentGamePads[primaryPlayer].ThumbSticks.Right.X > 0.9f, PreviousGamePads[primaryPlayer].ThumbSticks.Right.X > 0.9f);
            SetState(ref ArrowUp, CurrentGamePads[primaryPlayer].ThumbSticks.Right.Y > 0.9f, PreviousGamePads[primaryPlayer].ThumbSticks.Right.Y > 0.9f);
            SetState(ref ArrowDown, CurrentGamePads[primaryPlayer].ThumbSticks.Right.Y < -0.9f, PreviousGamePads[primaryPlayer].ThumbSticks.Right.Y < -0.9f);
            SetState(ref ArrowLeft, CurrentGamePads[primaryPlayer].ThumbSticks.Left.X < -0.9f, PreviousGamePads[primaryPlayer].ThumbSticks.Left.X < -0.9f);
            SetState(ref ArrowRight, CurrentGamePads[primaryPlayer].ThumbSticks.Left.X > 0.9f, PreviousGamePads[primaryPlayer].ThumbSticks.Left.X > 0.9f);
            SetState(ref ArrowUp, CurrentGamePads[primaryPlayer].ThumbSticks.Left.Y > 0.9f, PreviousGamePads[primaryPlayer].ThumbSticks.Left.Y > 0.9f);
            SetState(ref ArrowDown, CurrentGamePads[primaryPlayer].ThumbSticks.Left.Y < -0.9f, PreviousGamePads[primaryPlayer].ThumbSticks.Left.Y < -0.9f);

            SetState(ref Action1, CurrentGamePads[primaryPlayer].Buttons.A, PreviousGamePads[primaryPlayer].Buttons.A);
            SetState(ref Action2, CurrentGamePads[primaryPlayer].Buttons.B, PreviousGamePads[primaryPlayer].Buttons.B);
            SetState(ref Action3, CurrentGamePads[primaryPlayer].Buttons.X, PreviousGamePads[primaryPlayer].Buttons.X);
            SetState(ref Action3, CurrentGamePads[primaryPlayer].Buttons.Y, PreviousGamePads[primaryPlayer].Buttons.Y);
            SetState(ref ActionPause, CurrentGamePads[primaryPlayer].Buttons.Start, PreviousGamePads[primaryPlayer].Buttons.Start);

            SetState(ref ButtonYes, CurrentGamePads[primaryPlayer].Buttons.A, PreviousGamePads[primaryPlayer].Buttons.A);
            SetState(ref ButtonNo, CurrentGamePads[primaryPlayer].Buttons.B, PreviousGamePads[primaryPlayer].Buttons.B);
            SetState(ref ButtonYes, CurrentGamePads[primaryPlayer].Buttons.Start, PreviousGamePads[primaryPlayer].Buttons.Start);
            SetState(ref ButtonNo, CurrentGamePads[primaryPlayer].Buttons.Back, PreviousGamePads[primaryPlayer].Buttons.Back);

            SetState(ref ButtonBack, CurrentGamePads[primaryPlayer].Buttons.Back, PreviousGamePads[primaryPlayer].Buttons.Back);

            /************************                         keyboard                         ************************/
            SetState(ref ArrowLeft, CurrentKeyboard, PreviousKeyboard, Keys.Left);
            SetState(ref ArrowRight, CurrentKeyboard, PreviousKeyboard, Keys.Right);
            SetState(ref ArrowUp, CurrentKeyboard, PreviousKeyboard, Keys.Up);
            SetState(ref ArrowDown, CurrentKeyboard, PreviousKeyboard, Keys.Down);
            SetState(ref ArrowLeft, CurrentKeyboard, PreviousKeyboard, Keys.NumPad4);
            SetState(ref ArrowRight, CurrentKeyboard, PreviousKeyboard, Keys.NumPad6);
            SetState(ref ArrowUp, CurrentKeyboard, PreviousKeyboard, Keys.NumPad8);
            SetState(ref ArrowDown, CurrentKeyboard, PreviousKeyboard, Keys.NumPad2);
            SetState(ref ArrowLeft, CurrentKeyboard, PreviousKeyboard, Keys.A);
            SetState(ref ArrowRight, CurrentKeyboard, PreviousKeyboard, Keys.D);
            SetState(ref ArrowUp, CurrentKeyboard, PreviousKeyboard, Keys.W);
            SetState(ref ArrowDown, CurrentKeyboard, PreviousKeyboard, Keys.S);

            SetState(ref Action1, CurrentKeyboard, PreviousKeyboard, Keys.Z);
            SetState(ref Action2, CurrentKeyboard, PreviousKeyboard, Keys.X);
            SetState(ref Action3, CurrentKeyboard, PreviousKeyboard, Keys.C);
            SetState(ref ActionPause, CurrentKeyboard, PreviousKeyboard, Keys.Q);
            SetState(ref ActionPause, CurrentKeyboard, PreviousKeyboard, Keys.P);
            SetState(ref Action1, CurrentKeyboard, PreviousKeyboard, Keys.LeftControl);
            SetState(ref Action2, CurrentKeyboard, PreviousKeyboard, Keys.LeftAlt);
            SetState(ref Action3, CurrentKeyboard, PreviousKeyboard, Keys.LeftShift);
            SetState(ref ActionPause, CurrentKeyboard, PreviousKeyboard, Keys.Tab);
            SetState(ref Action1, CurrentKeyboard, PreviousKeyboard, Keys.RightControl);
            SetState(ref Action2, CurrentKeyboard, PreviousKeyboard, Keys.RightAlt);
            SetState(ref Action3, CurrentKeyboard, PreviousKeyboard, Keys.RightShift);
            SetState(ref ActionPause, CurrentKeyboard, PreviousKeyboard, Keys.Pause);

            SetState(ref ButtonYes, CurrentKeyboard, PreviousKeyboard, Keys.Z);
            SetState(ref ButtonNo, CurrentKeyboard, PreviousKeyboard, Keys.X);
            SetState(ref ButtonYes, CurrentKeyboard, PreviousKeyboard, Keys.Y);
            SetState(ref ButtonNo, CurrentKeyboard, PreviousKeyboard, Keys.N);
            SetState(ref ButtonYes, CurrentKeyboard, PreviousKeyboard, Keys.Enter);
            SetState(ref ButtonNo, CurrentKeyboard, PreviousKeyboard, Keys.Escape);

            SetState(ref ButtonBack, CurrentKeyboard, PreviousKeyboard, Keys.Escape);
            SetState(ref ButtonBack, CurrentKeyboard, PreviousKeyboard, Keys.Back);

            /************************                         Phone                         ************************/

            //CurrentTouches PreviousTouches

            foreach (TouchLocation TL in CurrentTouches)
            {
                TouchLocation PTL = new TouchLocation(TL.Id, TouchLocationState.Released, new Vector2(-10000,-10000));

                foreach (TouchLocation TL2 in PreviousTouches)
                {
                    if (TL2.Id == TL.Id)
                    {
                        PTL = TL2;
                        break;
                    }
                }

                Point TouchLocation = new Point(-10000, -10000);
                Point LastTouchLocation = new Point(-10000, -10000);

                #if WINDOWS_PHONE
                    if (TL.State == TouchLocationState.Pressed || TL.State == TouchLocationState.Moved)
                        TouchLocation = new Point((int)TL.Position.X, (int)TL.Position.Y);
                    if (PTL.State == TouchLocationState.Pressed || PTL.State == TouchLocationState.Moved)
                        LastTouchLocation = new Point((int)PTL.Position.X, (int)PTL.Position.Y);
                #else
                    if (CurrentMouse.LeftButton == ButtonState.Pressed)
                        TouchLocation = new Point(CurrentMouse.X, CurrentMouse.Y);
                    if (PreviousMouse.LeftButton == ButtonState.Pressed)
                        LastTouchLocation = new Point(PreviousMouse.X, PreviousMouse.Y);
                #endif

                if (PhoneInputState == PhoneInputState.PhoneControlNone)
                {
                    SetState(ref Action1, TouchLocation, LastTouchLocation, StaticGame.ScreenSize);
                    SetState(ref Action2, TouchLocation, LastTouchLocation, StaticGame.ScreenSize);
                    SetState(ref Action3, TouchLocation, LastTouchLocation, StaticGame.ScreenSize);
                    SetState(ref ButtonYes, TouchLocation, LastTouchLocation, StaticGame.ScreenSize);
                    SetState(ref ButtonNo, TouchLocation, LastTouchLocation, StaticGame.ScreenSize);
                }
                else
                {
                    SetState(ref ArrowLeft, TouchLocation, LastTouchLocation, new Rectangle(ArrowZone.X, ArrowZone.Y, ArrowZone.Width / 3, ArrowZone.Height));
                    SetState(ref ArrowRight, TouchLocation, LastTouchLocation, new Rectangle(ArrowZone.X + (2 * ArrowZone.Height) / 3, ArrowZone.Y, ArrowZone.Width / 3, ArrowZone.Height));
                    SetState(ref ArrowUp, TouchLocation, LastTouchLocation, new Rectangle(ArrowZone.X, ArrowZone.Y, ArrowZone.Width, ArrowZone.Height / 3));
                    SetState(ref ArrowDown, TouchLocation, LastTouchLocation, new Rectangle(ArrowZone.X, ArrowZone.Y + (2 * ArrowZone.Height) / 3, ArrowZone.Width, ArrowZone.Height / 3));

                    SetState(ref Action1, TouchLocation, LastTouchLocation, new Rectangle(ActionZone.X + (int)(ActionZone.Width * 0.3f), ArrowZone.Y + 7, (int)(ActionZone.Width * 0.4f), (int)(ActionZone.Width * 0.4f)));
                    SetState(ref Action2, TouchLocation, LastTouchLocation, new Rectangle(ActionZone.X + ActionZone.Width / 10, ArrowZone.Y + (int)(ActionZone.Height * 0.42f), (int)(ActionZone.Width * 0.4f), (int)(ActionZone.Width * 0.4f)));
                    SetState(ref Action3, TouchLocation, LastTouchLocation, new Rectangle(ActionZone.X + ActionZone.Width / 2, ArrowZone.Y + (int)(ActionZone.Height * 0.42f), (int)(ActionZone.Width * 0.4f), (int)(ActionZone.Width * 0.4f)));
                    SetState(ref ActionPause, TouchLocation, LastTouchLocation, PauseZone);

                    SetState(ref ButtonYes, TouchLocation, LastTouchLocation, new Rectangle(YesNoZone.X, YesNoZone.Y, (int)(YesNoZone.Width / 2.7f), YesNoZone.Height));
                    SetState(ref ButtonNo, TouchLocation, LastTouchLocation, new Rectangle(YesNoZone.X + (int)(YesNoZone.Width / 1.6f), YesNoZone.Y, (int)(YesNoZone.Width / 2.7f), YesNoZone.Height));
                }
            }

            SetState(ref ButtonBack, CurrentGamePads[0].Buttons.Back, PreviousGamePads[0].Buttons.Back);//phone must use gp0 back

        }
        #endregion Standard Input

        #region Exact Input
        void GetExactKeyboard(out KeyboardState CurrentKeyboard, out KeyboardState PreviousKeyboard)
        {
            CurrentKeyboard = this.CurrentKeyboard;
            PreviousKeyboard = this.PreviousKeyboard;
        }
        void GetExactGamePad(out GamePadState CurrentGamePads, out GamePadState PreviousGamePads)
        {
            CurrentGamePads = this.CurrentGamePads[primaryPlayer];
            PreviousGamePads = this.PreviousGamePads[primaryPlayer];
        }
        void GetExactGamePad(int Gamepad, out GamePadState CurrentGamePads, out GamePadState PreviousGamePads)
        {
            CurrentGamePads = this.CurrentGamePads[Gamepad];
            PreviousGamePads = this.PreviousGamePads[Gamepad];
        }
        void GetExactMouse(out MouseState CurrentMouse, out MouseState PreviousMouse)
        {
            CurrentMouse = this.CurrentMouse;
            PreviousMouse = this.PreviousMouse;
        }
        void GetExactTouch(out TouchCollection CurrentTouches, out TouchCollection PreviousTouches)
        {
            CurrentTouches = this.CurrentTouches;
            PreviousTouches = this.PreviousTouches;
        }
        #endregion Exact Input

        public override void Draw(GameTime gameTime)
        {
            base.Draw(gameTime);

            #if WINDOWS_PHONE
            Rectangle ScreenSize = StaticGame.ScreenSize;

            if (PhoneInputState == PhoneInputState.PhoneControlTop)
            {
                ArrowZone = new Rectangle(ScreenSize.X, ScreenSize.Y, ArrrowButton.Width, ArrrowButton.Height);
                ActionZone = new Rectangle(ScreenSize.X + ScreenSize.Width - ActionButton.Width, ScreenSize.Y, ActionButton.Width, ActionButton.Height);
                YesNoZone = new Rectangle(0, 0, 0, 0);
                PauseZone = new Rectangle(ScreenSize.X + (ScreenSize.Width - PauseButton.Width) / 2, ScreenSize.Y, PauseButton.Width, PauseButton.Height);
            }
            else if (PhoneInputState == PhoneInputState.PhoneControlBottom)
            {
                ArrowZone = new Rectangle(ScreenSize.X, ScreenSize.Y + ScreenSize.Height - ArrrowButton.Height, ArrrowButton.Width, ArrrowButton.Height);
                ActionZone = new Rectangle(ScreenSize.X + ScreenSize.Width - ActionButton.Width, ScreenSize.Y + ScreenSize.Height - ActionButton.Height, ActionButton.Width, ActionButton.Height);
                YesNoZone = new Rectangle(0, 0, 0, 0);
                PauseZone = new Rectangle(ScreenSize.X + (ScreenSize.Width - PauseButton.Width) / 2, ScreenSize.Y + ScreenSize.Height - PauseButton.Height, PauseButton.Width, PauseButton.Height);
            }
            else if (PhoneInputState == PhoneInputState.PhoneControlYesNo)
            {
                ArrowZone = new Rectangle(0, 0, 0, 0);
                ActionZone = new Rectangle(0, 0, 0, 0);
                YesNoZone = new Rectangle(ScreenSize.X + (ScreenSize.Width - YesNoButton.Width) / 2, ScreenSize.Y + (ScreenSize.Height - YesNoButton.Height) / 2, YesNoButton.Width, YesNoButton.Height);
                PauseZone = new Rectangle(0, 0, 0, 0);
            }
            else if (PhoneInputState == PhoneInputState.PhoneControlPauseTop)
            {
                ArrowZone = new Rectangle(0, 0, 0, 0);
                ActionZone = new Rectangle(0, 0, 0, 0);
                YesNoZone = new Rectangle(0, 0, 0, 0);
                PauseZone = new Rectangle(ScreenSize.X + (ScreenSize.Width - PauseButton.Width) / 2, ScreenSize.Y, PauseButton.Width, PauseButton.Height);
            }
            else if (PhoneInputState == PhoneInputState.PhoneControlPauseBottom)
            {
                ArrowZone = new Rectangle(0, 0, 0, 0);
                ActionZone = new Rectangle(0, 0, 0, 0);
                YesNoZone = new Rectangle(0, 0, 0, 0);
                PauseZone = new Rectangle(ScreenSize.X + (ScreenSize.Width - PauseButton.Width) / 2, ScreenSize.Y + ScreenSize.Height - PauseButton.Height, PauseButton.Width, PauseButton.Height);
            }

            SpriteBatch sb = StaticGame.SpriteBatch;
            sb.Draw(ArrrowButton, ArrowZone, Color.White);
            sb.Draw(ActionButton, ActionZone, Color.White);
            sb.Draw(YesNoButton, YesNoZone, Color.White);
            sb.Draw(PauseButton, PauseZone, Color.White);

            /*
            sb.DrawString(DebugFont, RawPhoneInputState.ToString(), new Vector2(100, 100), Color.White);
            sb.DrawString(DebugFont, "[<<, >>, ^^, vv] [A1, A2, A3, Pause] Yes, No, Back", new Vector2(0, 120), Color.White);
            sb.DrawString(DebugFont, "[" + ArrowLeft.ToString() + ArrowRight.ToString()+ ArrowUp.ToString()+ ArrowDown.ToString()+"] [" + Action1.ToString() + Action2.ToString()+ Action3.ToString()+  ActionPause.ToString()+"]" +ButtonYes.ToString()+ ButtonNo.ToString() +  ButtonBack.ToString(), new Vector2(0, 140), Color.White);
            
            sb.Draw(StaticGame.Game.MonoColor, new Rectangle(ArrowZone.X, ArrowZone.Y, ArrowZone.Width / 3, ArrowZone.Height), new Color(1f,0f,0f,0.2f));
            sb.Draw(StaticGame.Game.MonoColor, new Rectangle(ArrowZone.X + (2 * ArrowZone.Height) / 3, ArrowZone.Y, ArrowZone.Width / 3, ArrowZone.Height), new Color(1f,0f,0f,0.2f));
            sb.Draw(StaticGame.Game.MonoColor, new Rectangle(ArrowZone.X, ArrowZone.Y, ArrowZone.Width, ArrowZone.Height / 3), new Color(1f,0f,0f,0.2f));
            sb.Draw(StaticGame.Game.MonoColor, new Rectangle(ArrowZone.X, ArrowZone.Y + (2 * ArrowZone.Height) / 3, ArrowZone.Width, ArrowZone.Height / 3), new Color(1f,0f,0f,0.2f));

            sb.Draw(StaticGame.Game.MonoColor, new Rectangle(ActionZone.X + (int)(ActionZone.Width * 0.3f), ArrowZone.Y + 7, (int)(ActionZone.Width * 0.4f), (int)(ActionZone.Height * 0.4f)), new Color(0f, 1f, 0f, 0.2f));
            sb.Draw(StaticGame.Game.MonoColor, new Rectangle(ActionZone.X + ActionZone.Width / 10, ArrowZone.Y + (int)(ActionZone.Height*0.42f), (int)(ActionZone.Width * 0.4f), (int)(ActionZone.Height * 0.4f)), new Color(0f, 1f, 0f, 0.2f));
            sb.Draw(StaticGame.Game.MonoColor, new Rectangle(ActionZone.X + ActionZone.Width / 2, ArrowZone.Y + (int)(ActionZone.Height*0.42f), (int)(ActionZone.Width * 0.4f), (int)(ActionZone.Height * 0.4f)), new Color(0f, 1f, 0f, 0.2f));
            sb.Draw(StaticGame.Game.MonoColor, PauseZone, new Color(0f,1f,1f,0.2f));

            sb.Draw(StaticGame.Game.MonoColor, new Rectangle(YesNoZone.X, YesNoZone.Y,  (int)(YesNoZone.Width/2.7f), YesNoZone.Height), new Color(0f, 0f, 1f, 0.2f));
            sb.Draw(StaticGame.Game.MonoColor, new Rectangle(YesNoZone.X + (int)(YesNoZone.Width / 1.6f), YesNoZone.Y, (int)(YesNoZone.Width / 2.7f), YesNoZone.Height), new Color(0f, 0f, 1f, 0.2f));
             */
            #endif
        }
    }
}